/**
 * Copyright (c) 2012-2016 Moodstocks SAS
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

#include <conf.h>

const uint8_t jpec_qzr[64] = {
	16, 11, 10, 16, 24, 40, 51, 61,
	12, 12, 14, 19, 26, 58, 60, 55,
	14, 13, 16, 24, 40, 57, 69, 56,
	14, 17, 22, 29, 51, 87, 80, 62,
	18, 22, 37, 56, 68,109,103, 77,
	24, 35, 55, 64, 81,104,113, 92,
	49, 64, 78, 87,103,121,120,101,
	72, 92, 95, 98,112,100,103, 99
};

const float jpec_dct[7] = {
	0.49039, 0.46194, 0.41573, 0.35355,
	0.27779, 0.19134, 0.09755
};

const int jpec_zz[64] = {
	 0,  1,  8, 16,  9,  2,  3, 10,
	17, 24, 32, 25, 18, 11,  4,  5,
	12, 19, 26, 33, 40, 48, 41, 34,
	27, 20, 13,  6,  7, 14, 21, 28,
	35, 42, 49, 56, 57, 50, 43, 36,
	29, 22, 15, 23, 30, 37, 44, 51,
	58, 59, 52, 45, 38, 31, 39, 46,
	53, 60, 61, 54, 47, 55, 62, 63
};

const uint8_t jpec_dc_nodes[17] = { 0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0 };
const int jpec_dc_nb_vals = 12; /* sum of dc_nodes */
const uint8_t jpec_dc_vals[12] = { 0,1,2,3,4,5,6,7,8,9,10,11 };

const uint8_t jpec_ac_nodes[17] = { 0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d };
const int jpec_ac_nb_vals = 162; /* sum of ac_nodes */
const uint8_t jpec_ac_vals[162] = { 
	0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12, /* 0x00: EOB */
	0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,
	0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,
	0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0, /* 0xf0: ZRL */
	0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,
	0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,
	0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,
	0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,
	0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,
	0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,
	0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,
	0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,
	0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,
	0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,
	0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,
	0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,
	0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,
	0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,
	0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,
	0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,
	0xf9,0xfa
};

const uint8_t jpec_dc_len[12] = { 2,3,3,3,3,3,4,5,6,7,8,9 };
const int jpec_dc_code[12] = { 
	0x000,0x002,0x003,0x004,0x005,0x006,
	0x00e,0x01e,0x03e,0x07e,0x0fe,0x1fe 
};

const int8_t jpec_ac_len[256] = {
	 4, 2, 2, 3, 4, 5, 7, 8,
	10,16,16, 0, 0, 0, 0, 0,
	 0, 4, 5, 7, 9,11,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0, 5, 8,10,12,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0, 6, 9,12,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0, 6,10,16,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0, 7,11,16,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0, 7,12,16,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0, 8,12,16,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0, 9,15,16,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0, 9,16,16,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0, 9,16,16,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0,10,16,16,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0,10,16,16,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0,11,16,16,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	 0,16,16,16,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0,
	11,16,16,16,16,16,16,16,
	16,16,16, 0, 0, 0, 0, 0
};

const int jpec_ac_code[256] = {
	0x000a,0x0000,0x0001,0x0004,0x000b,0x001a,0x0078,0x00f8,
	0x03f6,0xff82,0xff83,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x000c,0x001b,0x0079,0x01f6,0x07f6,0xff84,0xff85,
	0xff86,0xff87,0xff88,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x001c,0x00f9,0x03f7,0x0ff4,0xff89,0xff8a,0xff8b,
	0xff8c,0xff8d,0xff8e,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x003a,0x01f7,0x0ff5,0xff8f,0xff90,0xff91,0xff92,
	0xff93,0xff94,0xff95,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x003b,0x03f8,0xff96,0xff97,0xff98,0xff99,0xff9a,
	0xff9b,0xff9c,0xff9d,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x007a,0x07f7,0xff9e,0xff9f,0xffa0,0xffa1,0xffa2,
	0xffa3,0xffa4,0xffa5,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x007b,0x0ff6,0xffa6,0xffa7,0xffa8,0xffa9,0xffaa,
	0xffab,0xffac,0xffad,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x00fa,0x0ff7,0xffae,0xffaf,0xffb0,0xffb1,0xffb2,
	0xffb3,0xffb4,0xffb5,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x01f8,0x7fc0,0xffb6,0xffb7,0xffb8,0xffb9,0xffba,
	0xffbb,0xffbc,0xffbd,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x01f9,0xffbe,0xffbf,0xffc0,0xffc1,0xffc2,0xffc3,
	0xffc4,0xffc5,0xffc6,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x01fa,0xffc7,0xffc8,0xffc9,0xffca,0xffcb,0xffcc,
	0xffcd,0xffce,0xffcf,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x03f9,0xffd0,0xffd1,0xffd2,0xffd3,0xffd4,0xffd5,
	0xffd6,0xffd7,0xffd8,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x03fa,0xffd9,0xffda,0xffdb,0xffdc,0xffdd,0xffde,
	0xffdf,0xffe0,0xffe1,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x07f8,0xffe2,0xffe3,0xffe4,0xffe5,0xffe6,0xffe7,
	0xffe8,0xffe9,0xffea,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0xffeb,0xffec,0xffed,0xffee,0xffef,0xfff0,0xfff1,
	0xfff2,0xfff3,0xfff4,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x07f9,0xfff5,0xfff6,0xfff7,0xfff8,0xfff9,0xfffa,0xfffb,
	0xfffc,0xfffd,0xfffe,0x0000,0x0000,0x0000,0x0000,0x0000
};
